package com.system.controller;

import com.system.service.SysUserService;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@Controller
public class LoginController {
    //注入业务接口
    @Autowired
    private SysUserService sysUserService;

    @RequestMapping(value = "/login")
    public String login(HttpServletRequest request, HttpServletResponse response, HttpSession session,
                        Model model) {
        /** 如果登陆失败从request中获取认证异常信息，shiroLoginFailure就是shiro异常类的全限定名 */
        String exceptionClassName = (String) request.getAttribute("shiroLoginFailure");
        /** 根据shiro返回的异常类路径判断，抛出指定异常信息 */
        if (exceptionClassName != null) {
            if (UnknownAccountException.class.getName().equals(exceptionClassName)) {
                /** 最终会抛给异常处理器 */
                model.addAttribute("message", "账号不存在!");
            } else if (IncorrectCredentialsException.class.getName().equals(exceptionClassName)) {
                model.addAttribute("message", "用户名或密码错误!");
            } else {
                /** 最终在异常处理器生成未知错误 */
                model.addAttribute("message", "未知错误!");
            }
        }
        /** 此方法不处理登陆成功（认证成功），shiro认证成功会自动跳转到上一个请求路径,登陆失败还到login页面 */
        return "login";
    }
}